//
//  SLTimerController.m
//  Objective-C
//
//  Created by S_Line on 2018/9/6.
//  Copyright © 2018年 S_Line. All rights reserved.
//

#import "SLTimerController.h"

#import "SLTimerViewModel.h"

#import "SLTimerCell.h"

/*
 * NSRunLoop相关知识
 *
 * <--------------------runloop和线程的关系-------------------->
 * runloop是线程一直运行的一个对象。它主要用来负责响应需要处理的事件和消息。
 * 每一个线程最多开启一个runloop。它主要用来响应需要处理的事件和消息。
 *
 * <--------------------iOS的Run Loop机制-------------------->
 * 本质上Run Loop是一个While死循环。不停地监听事件以及处理事件。
 * 我们可以自己写一个While循环来做到这点，但是苹果封装的显然会更好。
 * 它有不同的运行模式，不同的接收源和定时源，不工作时进入休眠状态。
 *
 * <--------------------     结    构     -------------------->
 * 一个Run Loop可以接收的时间类型有两种：
 * 一种是输入源(Input Source)，一种是定时源(Timer Source)。
 * 前者是一部传递时间的，通常消息是来自其他线程应用发送的；
 * 而后者是同步时间，比如定时计划或者定时重复的工作。
 *
 * <--------------------输入源(Input Source)-------------------->
 * 输入源重要有三种：
 * - 基于端口的输入源
 * - 自定义输入源
 * - selector源
 * 其中selector源就是常用的performSelector方法
 *
 * <--------------------定时源(Timer Source)-------------------->
 * 定时源是常用的NSTimer定时类；其机制也是基于Run Loop运行的，
 * 只是在指定的s间隔时间发送消息给需要处理的回调方法。
 *
 * <--------------------      启动模式      -------------------->
 * default
 * connection
 * modal
 * event tracking
 * common modes
 *
 * NSTimer相关知识
 *
 */

@interface SLTimerController ()<UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, strong) SLTimerViewModel *viewModel;

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConstraints;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraints;

@end

@implementation SLTimerController

- (void)initNavBar {
    self.navTitle = @"定时器";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self initNavBar];
    
    [self initData];
    
    [self initView];
}

- (void)initData {
    self.viewModel = [SLTimerViewModel new];
}

- (void)initView {
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.tableView registerNib:[UINib nibWithNibName:@"SLTimerCell" bundle:nil] forCellReuseIdentifier:@"SLTimerCell"];
}

#pragma mark ----- UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [self.viewModel numberOfSections];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.viewModel numberOfRowsInSection:section];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    SLTimerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SLTimerCell"];
    
    cell.timerModel = [self.viewModel dataForRowAtIndexPath:indexPath];
    
    return cell;
}

@end
